<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			//1.Promise含义
			    //Promise 是异步编程的一种解决方案，比传统的解决方案——回调函数和事件——更合理和更强大。
			//2.基本用法
			    //ES6 规定，Promise对象是一个构造函数，用来生成Promise实例。
			    //Promise构造函数接受一个函数作为参数，该函数的两个参数分别是resolve和reject。它们是两个函数，由 JavaScript 引擎提供，不用自己部署。
			    
			    //resolve函数的作用是，将Promise对象的状态从“未完成”变为“成功”（即从 pending 变为 resolved），
			    //resolve函数在异步操作成功时调用，并将异步操作的结果，作为参数传递出去；
			    
			    //reject函数的作用是，将Promise对象的状态从“未完成”变为“失败”（即从 pending 变为 rejected）
			    //reject函数在异步操作失败时调用，并将异步操作报出的错误，作为参数传递出去。
				            const promise = new Promise(function(resolve, reject) {
								  // ... some code
								
								  if (/* 异步操作成功 */){
								    resolve(value);
								  } else {
								    reject(error);
								  }
							});
				//Promise实例生成以后，可以用then方法分别指定resolved状态和rejected状态的回调函数。
				//then方法可以接受两个回调函数作为参数。
				//第一个回调函数是Promise对象的状态变为resolved时调用。
				//第二个回调函数是Promise对象的状态变为rejected时调用。其中，第二个函数是可选的，不一定要提供。这两个函数都接受Promise对象传出的值作为参数。
				            promise.then(function(value){
				            	//success
				            },function(error){
				            	//failure
				            })
				            
				//例子
				            function timeout(ms){
								return new Promise((resolve,reject)=>{
									setTimeout(resolve,ms,'done');//第三个以后的参数是作为第一个func()的参数传进去。
								})
							}
							timeout(100).then((value)=>{
								console.log(value)
							})
							
				//Promise 新建后就会立即执行。
				            let promise = new Promise(function(resolve, reject) {
							  console.log('Promise');
							  resolve();
							});
							
							promise.then(function() {
							  console.log('resolved.');
							});
							console.log('Hi!');
			                //执行结果 Promise Hi! resolved
		</script>
	</body>
</html>
